/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Interface;

/**
 * 视频下载器
 * @author wcss
 */
public abstract class AVideoDownloader 
{
    
    /**
     * 下载器ID
     */
    public String downloaderID;
    
    /**
     * 工作事件
     */
    public IDownloadProgressEvent workEvent; 
    
    /**
     * 视频地址
     */
    public String videoUrl;
    
    /**
     * 下载器类型
     */
    public String downloadType;
    
    /**
     * 下载器临时数据
     */
    public Object tag;
    
    /**
     * 当前视频缓存文件路径
     */
    protected String videoBufferUrl;
    
    /**
     * 缓存目录
     */
    protected String bufferDir;
    
    /**
     * 设置缓存目录
     * @param bufferdir 
     */
    public void setBufferDir(String bufferdir)
    {
        this.bufferDir = bufferdir;
    }
    
    /**
     * 设置最大下载速度
     */
    public abstract void setMaxDownloadSpeed(int speed);
    
        /**
     * 设置最大上传速度
     */
    public abstract void setMaxUploadSpeed(int speed);
    
    /**
     * 清理缓存目录
     */
    public abstract void clearBufferDir();
    
    /**
     * 获取缓存目录
     * @return 
     */
    public String getBufferDir()
    {
        return this.bufferDir;
    }
    
    /**
     * 获取最大下载速度
     * @return 
     */
    public abstract int getMaxDownloadSpeed();
    
    /**
     * 获取最大上传速度
     * @return 
     */
    public abstract int getMaxUploadSpeed();
    
    /**
     * 是否在运行之中
     * @return 
     */
    public abstract Boolean isRunning();
    
    /**
     * 是否为有效的地址
     * @return 
     */
    public abstract Boolean isValidUrl(String url);
    
    /**
     * 打开连接
     * @param videourl 
     * @param downloadtype
     */
    public abstract void open(String videourl) throws Exception;
    
    /**
     * 开始下载
     */
    public abstract void start() throws Exception;
    
    /**
     * 停止下载
     */
    public abstract void stop() throws Exception;
    
    /**
     * 获取数据原始大小
     * @return 
     */
    public abstract long getTotalSize();
    
    /**
     * 获取已下载大小
     * @return 
     */
    public abstract long getCurSize();
    
    /**
     * 获取下载进度
     * @return 
     */
    public abstract int getDownloadProgress();
    
    /**
     * 获取视频缓存文件路径
     * @return 
     */
    public abstract String getVideoBufferUrl();
    
    /**
     * 获取下载速度
     * @return 
     */
    public abstract int getDownloadSpeed();
    
    /**
     * 获取数据显示名称
     * @return 
     */
    public abstract String getVideoShowName();
    
    /**
     * 获取一个相同类型的新下载器
     * @return 
     */
    public abstract AVideoDownloader getNewDownloader();
    
    /**
     * 
     * @param error 
     */
    protected void onReportError(String code,String error)
    {
        if (this.workEvent != null)
        {
            this.workEvent.onReportError(this,code,error);
        }
    }
    
        /**
     * 
     * @param error 
     */
    protected void onReportStatus(String state)
    {
        if (this.workEvent != null)
        {
            this.workEvent.onReportStatus(this, state);
        }
    }
    
    /**
     * 
     * @param current 
     */
    protected void onReportProgress(long current)
    {
        if (this.workEvent != null)
        {
            this.workEvent.onReportProgress(this, current, this.getTotalSize());
        }
    }
    
    /**
     * 
     */
    protected void onReportFinish()
    {
        if (this.workEvent != null)
        {
            this.workEvent.onReportFinish(this);
        }
    }    
}
